home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagn_r.zip / NUMBERS.SWG / 0037_Bit Handler.pas < prev    next >
Pascal/Delphi Source File  |  1993-11-21  |  6KB  |  239 lines

  1. UNIT Bits;
  2. (**) INTERFACE (**)
  3. TYPE
  4.   bbit = 0..7;
  5.   wbit = 0..15;
  6.   lbit = 0..31;
  7.  
  8.   PROCEDURE SetBitB(VAR B : Byte; bit : bbit);
  9.   PROCEDURE ClearBitB(VAR B : Byte; bit : bbit);
  10.   PROCEDURE ToggleBitB(VAR B : Byte; bit : bbit);
  11.   FUNCTION BitSetB(B : Byte; bit : bbit) : Boolean;
  12.   FUNCTION BitClearB(B : Byte; bit : bbit) : Boolean;
  13.  
  14.   PROCEDURE SetBitW(VAR W : Word; bit : wbit);
  15.   PROCEDURE ClearBitW(VAR W : Word; bit : wbit);
  16.   PROCEDURE ToggleBitW(VAR W : Word; bit : wbit);
  17.   FUNCTION BitSetW(W : Word; bit : wbit) : Boolean;
  18.   FUNCTION BitClearW(W : Word; bit : wbit) : Boolean;
  19.  
  20.   PROCEDURE SetBitL(VAR L : LongInt; bit : lbit);
  21.   PROCEDURE ClearBitL(VAR L : LongInt; bit : lbit);
  22.   PROCEDURE ToggleBitL(VAR L : LongInt; bit : lbit);
  23.   FUNCTION BitSetL(L : LongInt; bit : lbit) : Boolean;
  24.   FUNCTION BitClearL(L : LongInt; bit : lbit) : Boolean;
  25.  
  26. (**) IMPLEMENTATION (**)
  27.   PROCEDURE SetBitB(VAR B : Byte; bit : bbit);
  28.               Assembler;
  29.   ASM
  30.     MOV CL, bit
  31.     MOV BL, 1
  32.     SHL BL, CL      {BL contains 2-to-the-bit}
  33.     LES DI, B
  34.     OR ES:[DI], BL  {OR turns on bit}
  35.   END;
  36.  
  37.   PROCEDURE ClearBitB(VAR B : Byte; bit : bbit);
  38.               Assembler;
  39.   ASM
  40.     MOV CL, bit
  41.     MOV BL, 1
  42.     SHL BL, CL      {BL contains 2-to-the-bit}
  43.     NOT BL
  44.     LES DI, B
  45.     AND ES:[DI], BL {AND of NOT BL turns off bit}
  46.   END;
  47.  
  48.   PROCEDURE ToggleBitB(VAR B : Byte; bit : bbit);
  49.               Assembler;
  50.   ASM
  51.     MOV CL, bit
  52.     MOV BL, 1
  53.     SHL BL, CL      {BL contains 2-to-the-bit}
  54.     LES DI, B
  55.     XOR ES:[DI], BL {XOR toggles bit}
  56.   END;
  57.  
  58.   FUNCTION BitSetB(B : Byte; bit : bbit) : Boolean;
  59.              Assembler;
  60.   ASM
  61.     MOV CL, bit
  62.     MOV BL, 1
  63.     SHL BL, CL      {BL contains 2-to-the-bit}
  64.     MOV AL, 0       {set result to FALSE}
  65.     TEST B, BL
  66.     JZ @No
  67.     INC AL          {set result to TRUE}
  68.     @No:
  69.   END;
  70.  
  71.   FUNCTION BitClearB(B : Byte; bit : bbit) : Boolean;
  72.              Assembler;
  73.   ASM
  74.     MOV CL, bit
  75.     MOV BL, 1
  76.     SHL BL, CL      {BL contains 2-to-the-bit}
  77.     MOV AL, 0       {set result to FALSE}
  78.     TEST B, BL
  79.     JNZ @No
  80.     INC AL          {set result to TRUE}
  81.     @No:
  82.   END;
  83.  
  84.   PROCEDURE SetBitW(VAR W : Word; bit : wbit);
  85.               Assembler;
  86.   ASM
  87.     MOV CL, bit
  88.     MOV BX, 1
  89.     SHL BX, CL      {BX contains 2-to-the-bit}
  90.     LES DI, W
  91.     OR ES:[DI], BX  {OR turns on bit}
  92.   END;
  93.  
  94.   PROCEDURE ClearBitW(VAR W : Word; bit : wbit);
  95.               Assembler;
  96.   ASM
  97.     MOV CL, bit
  98.     MOV BX, 1
  99.     SHL BX, CL      {BX contains 2-to-the-bit}
  100.     NOT BX
  101.     LES DI, W
  102.     AND ES:[DI], BX {AND of NOT BX turns off bit}
  103.   END;
  104.  
  105.   PROCEDURE ToggleBitW(VAR W : Word; bit : wbit);
  106.               Assembler;
  107.   ASM
  108.     MOV CL, bit
  109.     MOV BX, 1
  110.     SHL BX, CL      {BX contains 2-to-the-bit}
  111.     LES DI, W
  112.     XOR ES:[DI], BX {XOR toggles bit}
  113.   END;
  114.  
  115.   FUNCTION BitSetW(W : Word; bit : wbit) : Boolean;
  116.              Assembler;
  117.   ASM
  118.     MOV CL, bit
  119.     MOV BX, 1
  120.     SHL BX, CL      {BX contains 2-to-the-bit}
  121.     MOV AL, 0       {set result to FALSE}
  122.     TEST W, BX
  123.     JZ @No
  124.     INC AL          {set result to TRUE}
  125.     @No:
  126.   END;
  127.  
  128.   FUNCTION BitClearW(W : Word; bit : wbit) : Boolean;
  129.              Assembler;
  130.   ASM
  131.     MOV CL, bit
  132.     MOV BX, 1
  133.     SHL BX, CL      {BX contains 2-to-the-bit}
  134.     MOV AL, 0       {set result to FALSE}
  135.     TEST W, BX
  136.     JNZ @No
  137.     INC AL          {set result to TRUE}
  138.     @No:
  139.   END;
  140.  
  141.   PROCEDURE SetBitL(VAR L : LongInt; bit : lbit);
  142.               Assembler;
  143.   ASM
  144.     LES DI, L
  145.     MOV CL, bit
  146.     MOV BX, 1
  147.     SHL BX, CL      {BX contains 2-to-the-bit}
  148.     JZ @TopWord     {if zero, use high word}
  149.     OR ES:[DI], BX  {OR turns on bit}
  150.     JMP @Finish
  151.     @TopWord:
  152.     SUB CL, 16
  153.     MOV BX, 1
  154.     SHL BX, CL
  155.     OR ES:[DI+2], BX
  156.     @Finish:
  157.   END;
  158.  
  159.   PROCEDURE ClearBitL(VAR L : LongInt; bit : lbit);
  160.               Assembler;
  161.   ASM
  162.     LES DI, L
  163.     MOV CL, bit
  164.     MOV BX, 1
  165.     SHL BX, CL      {BX contains 2-to-the-bit}
  166.     JZ @TopWord     {if zero, use high word}
  167.     NOT BX
  168.     AND ES:[DI], BX {AND of NOT BX turns off bit}
  169.     JMP @Finish
  170.     @TopWord:
  171.     SUB CL, 16
  172.     MOV BX, 1
  173.     SHL BX, CL
  174.     NOT BX
  175.     AND ES:[DI+2], BX
  176.     @Finish:
  177.   END;
  178.  
  179.   PROCEDURE ToggleBitL(VAR L : LongInt; bit : lbit);
  180.               Assembler;
  181.   ASM
  182.     LES DI, L
  183.     MOV CL, bit
  184.     MOV BX, 1
  185.     SHL BX, CL      {BX contains 2-to-the-bit}
  186.     JZ @TopWord     {if zero, use high word}
  187.     XOR ES:[DI], BX {XOR toggles bit}
  188.     JMP @Finish
  189.     @TopWord:
  190.     SUB CL, 16
  191.     MOV BX, 1
  192.     SHL BX, CL
  193.     XOR ES:[DI+2], BX
  194.     @Finish:
  195.   END;
  196.  
  197.   FUNCTION BitSetL(L : LongInt; bit : lbit) : Boolean;
  198.              Assembler;
  199.   ASM
  200.     MOV AL, 0       {set result to FALSE}
  201.     MOV CL, bit
  202.     MOV BX, 1
  203.     SHL BX, CL      {BX contains 2-to-the-bit}
  204.     JZ @TopWord     {if zero, use high word}
  205.     TEST Word(L), BX
  206.     JMP @Finish
  207.     @TopWord:
  208.     SUB CL, 16
  209.     MOV BX, 1
  210.     SHL BX, CL
  211.     TEST Word(L+2), BX
  212.     @Finish:
  213.     JZ @No
  214.     INC AL          {set result to TRUE}
  215.     @No:
  216.   END;
  217.  
  218.   FUNCTION BitClearL(L : LongInt; bit : lbit) : Boolean;
  219.              Assembler;
  220.   ASM
  221.     MOV AL, 0       {set result to FALSE}
  222.     MOV CL, bit
  223.     MOV BX, 1
  224.     SHL BX, CL      {BX contains 2-to-the-bit}
  225.     JZ @TopWord     {if zero, use high word}
  226.     TEST Word(L), BX
  227.     JMP @Finish
  228.     @TopWord:
  229.     SUB CL, 16
  230.     MOV BX, 1
  231.     SHL BX, CL
  232.     TEST Word(L+2), BX
  233.     @Finish:
  234.     JNZ @No
  235.     INC AL          {set result to TRUE}
  236.     @No:
  237.   END;
  238. END.
  239.